<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>创建对象</title>
</head>

<body>
  <script>
  //  5. Object.create():Object.create(参数对象)方法，使用参数对象来创建一个新对象。新对象的prototype指向参数对象。
  let myCat = {
        name: "波斯猫",
        age: 1,
        color: "橘色",
        eat: function () {
          console.log("喜欢美女");
        },
      };
  let a = Object.create(myCat)
  console.log(a); // {}=> prototype对象上面，包括了 myCat对象的属性、方法， 实现的是对象属性的继承。
  // console.log(a.age);  // 1
  // a.eat() // 喜欢美女

  // 6. Object.assign(target,source),方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。
  let target = {x:111,y:12};
  let sourceObj = {a:12,b:'hello', c:0, read(){console.log('reading...');}}
  // let newObj = Object.assign(target, sourceObj)
  // console.log(target); //{a: 12, b: 'hello', c: 0,read: ƒ}
  // console.log(newObj) // Object.assign()返回了 target 合并 sorceObj属性后的结果，
  // console.log(target === newObj); // true
  // console.log(sourceObj);  // 不改变的

  let newObj2 = Object.assign(target, sourceObj, a);
  console.log(target); // {x:111,y:12,a:12,b:'hello', c:0, read(){console.log('reading...');}, 没有a对象的原型对象上的属性。

  // Object.assign（），只会遍历对象自己拥有的属性，不会遍历对象原型对象上面的属性。

  // console.log(Object.assign({},window));
  </script>
</body>

</html>